package com.bot.dev.module.job.task;

import cn.hutool.core.date.DateTime;
import com.bot.common.chainbo.ChainAccountInfo;
import com.bot.common.timer.CommonTimerTaskRunner;
import com.bot.dev.api.DevBlockChainApi;
import com.bot.nft.core.config.LogDescription;
import com.bot.nft.core.enums.chain.ChainLogEnum;
import com.bot.nft.module.chain.domain.ChainOptLogInfo;
import com.bot.nft.module.chain.service.ChainOptLogServer;
import com.bot.nft.module.dc.domain.DcNftInfo;
import com.bot.nft.module.dc.service.IDcNftInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 * 定时器的一个示例
 *
 * @author botian
 * @date 2022/8/5 15:52
 **/
@Slf4j
@Component
public class NftTimerTaskRunner implements CommonTimerTaskRunner {

    private int n = 1;

    @Resource
    IDcNftInfoService dcNftInfoService;

    @Resource
    DevBlockChainApi devBlockChainApi;

    @Resource
    ChainOptLogServer chainOptLogServer;

    @Override
    public void action() {
        NftTimerTaskRunner.log.info("我是一个发售定时任务，正在在被执行第" + n + "次");
        n = n + 1;
        //这里写下你想要执行的业务逻辑代码
        List<DcNftInfo> dcNftInfos = dcNftInfoService.selectNftTime();
        //藏品发售时间
        for (DcNftInfo dcNftInfo : dcNftInfos) {
            Date saleTime = dcNftInfo.getSaleTime();
            //创建一个系统当先时间
            Date date = new Date();
            //计算时间差
            if (saleTime.before(date)) {

                //藏品上链
                Boolean boo = dcNftInfoService.saleDcNft(dcNftInfo.getId());
                //判断是否上链成功
                if (boo){
                    ChainAccountInfo chainAccountInfo = new ChainAccountInfo();
                    chainAccountInfo.setUri(dcNftInfo.getCover());
                    chainAccountInfo.setName(dcNftInfo.getName());
                    chainAccountInfo.setDescription(dcNftInfo.getRemark());
                    chainAccountInfo.setData(dcNftInfo.getId());
                    String operationId = devBlockChainApi.creatNftClass(chainAccountInfo);
                    //创建日志表id
                    ChainOptLogInfo chainOptLogInfo = new ChainOptLogInfo();
                    chainOptLogInfo.setStatus(ChainLogEnum.UNTREATEDSTATUS.getValue());
                    chainOptLogInfo.setDcOptType(ChainLogEnum.BUSINESS_SELL.getValue());
                    chainOptLogInfo.setObjId(dcNftInfo.getId());
                    chainOptLogInfo.setChainOptType(ChainLogEnum.CHAIN_CREATE_NFT_CLASS.getValue());
                    chainOptLogInfo.setObjId(dcNftInfo.getId());
                    chainOptLogInfo.setOperationId(operationId);
                    chainOptLogInfo.setOptTime(new DateTime());
                    chainOptLogInfo.setOptDesc(LogDescription.sale(dcNftInfo.getId()));
                    chainOptLogInfo.setUserId(dcNftInfo.getId());
                    Boolean b = chainOptLogServer.insertCPLog(chainOptLogInfo);
                    System.out.println("藏品发售中");
                }
            }
        }
    }
}
